package com.cn.sl.server.api.system.menu.service.impl

import com.cn.sl.server.api.system.menu.dao.rdb.MenuDao
import com.cn.sl.server.api.system.menu.model.dto.AddButtonDto
import com.cn.sl.server.api.system.menu.model.dto.AddMenuDto
import com.cn.sl.server.api.system.menu.model.dto.EditMenuDto
import com.cn.sl.server.api.system.menu.model.dto.MenuDto
import com.cn.sl.server.api.system.menu.service.MenuService
import com.cn.sl.server.common.annotation.transaction.Commit
import com.cn.sl.server.common.annotation.transaction.ReadOnly
import org.springframework.stereotype.Service

@Service
class MenuServiceImpl(
    val menuDao: MenuDao
) : MenuService {
    @ReadOnly
    override fun findAll(): List<MenuDto> {
        return menuDao.findAll().map { MenuDto(it) }
    }

    @Commit
    override fun addMenu(dto: AddMenuDto) {
        menuDao.save(dto.toEntity())
    }

    @Commit
    override fun addButton(dto: AddButtonDto) {
        menuDao.save(dto.toEntity())
    }

    @Commit
    override fun editMenu(dto: EditMenuDto) {
        menuDao.findById(dto.id).let {
            dto.merge(it)

            menuDao.save(it)
        }
    }

    @ReadOnly
    override fun findById(id: Long): MenuDto {
        return MenuDto(menuDao.findById(id))
    }

    @ReadOnly
    override fun delete(id: Long) {
        menuDao.deleteById(id)
    }
}